/**
 * @author WRP
 */

// CRIA A DIRECTIVE ON CHANGE
angular.module('fileChange',[]).directive('fileChange', [
    function() {
        return {
            link: function(scope, element, attrs) {
                element[0].onchange = function() {
                    scope[attrs['fileChange']](element[0]);
                }
            }
        }
    }
]);

angular.module('componenteUpload',['fileChange','ui.bootstrap','mensagem','uploadFacty','b5sUtil']).directive('componenteUpload',function () {
	return {
		restrict: 'AE',
    	scope: {
    		dadosComponente :'=dados',
    		identificador   :'=identificador'
    	},
	 	templateUrl: './view/componentes/html/upload.php',
	 	controller: function ($scope, $http, $attrs,mensagem,uploadFacty,b5sUtil) {
	       
		   $scope.percentual   = 0;
		   $scope.arquivo      = {};
		   
		   $scope.limpar  = function(){
		   		$scope.percentual   = 1;
		   		$scope.arquivo      = {};
		   		$scope.nomeArquivo  = "";
		   };
		    	       
	       // FUNÇÃO QUE REALIZA O UPLOAD DO ARQUIVO
	       $scope.upload =  function(element) {
	       	    
	       	    $scope.percentual   = 1;
		        $scope.arquivo      = {};
		   
	       	    $scope.$apply(function() {        
		            $scope.arquivo = element.files[0];
		        });
		        
   	 			$scope.nomeArquivo = $scope.arquivo.name;
				
		        var client   = new XMLHttpRequest();
		
		        var formData = new FormData();
		        formData.append("txiFile", $scope.arquivo);
		        
		        client.onprogress  = function updateProgress(e) {  
				   	  $scope.$apply(function(){
				   	 		 $scope.percentual = (e.loaded / e.total) * 100; 	
				   	  });
				};
				   
		        client.open("post", "./upload.php", true);
		        client.send(formData);
		        
		        client.onreadystatechange = function(){ 
			    	 
			    	if ( client.readyState == 4 ) { 
			      		if ( (client.status != 200) || (client.responseText == "0") ) { 
			            	 mensagem.erro("Erro ao realizar o upload do arquivo!"); 
			      		}else{
			      			if($scope.dadosComponente.chamaRetorno){
			      			
			      				$scope.arquivo.nome = client.responseText;
			      				
			      				if($scope.identificador){
			      					$scope.arquivo.identificador = $scope.identificador;
			      				}
			      				
			      				uploadFacty.setFuncaoLimpar($scope.limpar);
			      				
				    			var instaciaFuncao           = uploadFacty.getFuncaoRetorno();
				    			 instaciaFuncao($scope.arquivo);
			    			}
			      		}
			    	} 
			  	};    
		      
		    	
			    client.onerror = function() {
			        $scope.percentual =0;
			         mensagem.erro("Erro ao realizar o upload!"); 
			    };
		            
		   };
		   
		   uploadFacty.setFuncaoLimpar($scope.limpar); 
	    }
	};
});






